//交叉类型
//&=> && 交集
//|=> ||  并集

interface Person1{
    handsome:string,
    n:{
        n:string
    }
}
interface Person2{
    high:string,
    n:{
        n:number
    }
}
interface Person3{
    rich:string
}
//又高又帅又有钱的人是交集
type Person4=Person1 & Person2 & Person3

// const person4:Person4={
//     handsome:'帅',
//     high:'高',
//     rich:'富',
//     // n:{
//     //     // n:never
//     //     // n:'33'//如果冲突，就是never类型
//     // }
// }

function mix<T,K>(o1:T,o2:K){
    return {...o1,...o2}

}
const result=mix({a:1},{a:'2'})
type Mix=typeof result; //相当于：{
//     a: number;
// } & {
//     a: string;
// } ，但是这种情况不可能存在
type Ival=Mix['a'] //所以取到的a是never

type a=('string' | 'number') & {}//相当于type a = "string" | "number"

interface X{
    <T>(val:T):T //函数调用的时候确认类型
}
const x:X=(val)=>{
return val
}
const dd1=x('ddd')
export {}